package com.leetcode.May;

import java.util.HashSet;

/**
 * @Description: 无重复字符的最长子串
 * @Author: Mr.Fxy
 * @CreateTime: 2024-05-15 10:06
 */
public class LongestCharacter {
    public static void main(String[] args) {
        int i = lengthOfLongestSubstring("dvdf");//dvdf  pwwkew
        System.out.println(i);

    }
//    public static int lengthOfLongestSubstring(String s) {
//        int max = 0;
//        int left = 0; // 左指针，用于滑动窗口的起始位置
//        HashSet<Character> set = new HashSet<>();
//        for (int right = 0; right < s.length(); right++) { // right指针，用于遍历字符串
//            char currentChar = s.charAt(right);
//            while (set.contains(currentChar)) { // 当前字符已存在，移动左指针缩小窗口
//                set.remove(s.charAt(left));
//                left++;
//            }
//            set.add(currentChar); // 当前字符未出现过，加入集合，扩大窗口
//            max = Math.max(max, right - left + 1); // 更新最长子串长度
//        }
//        return max;
//    }
    public static int lengthOfLongestSubstring(String s) {
        int max=0;
        int left=0;
        HashSet<Character> set = new HashSet<>();
        for (int i = 0; i < s.length(); i++) {
            while (set.contains(s.charAt(i))) {
                set.remove(s.charAt(left));
                left++;
            }
            set.add(s.charAt(i));
            max = Math.max(max, i-left+1);//set.size
        }
        return max;
    }
}
